<?php

namespace App\Pool\Core;


class MySQL
{
    /**
     * 在实例化时获取到的连接池对象
     * @var
     */
    protected $pool;

    public function __construct($pool)
    {
        $this->pool = $pool;
    }

    /**
     * 从连接池中获取连接
     * @return mixed
     */
    public function connection()
    {
        return $this->pool->get();
    }

    /**
     * 向连接池中归还连接
     * @param $pdo
     */
    public function put($pdo)
    {
        $this->pool->put($pdo);
    }

    /**
     * MySQL查询操作
     * @param $sql
     * @return string
     */
    public function query($sql)
    {
        try {
            $pdo    = $this->connection();
            $return = $pdo->query($sql)->fetchAll(\PDO::FETCH_ASSOC);
            // 归还连接，很重要！！！
            $this->put($pdo);

            return $return;
        } catch (\PDOException $e) {
            // 出现异常，归还一个空连接以保证连接池的数量平衡。很重要！！！
            $this->put(null);
            return $e->getMessage();
        }
    }

    /**
     * MySQL增删改操作
     * @param $sql
     * @return bool|string
     */
    public function execute($sql)
    {
        try {
            $pdo = $this->connection();
            $pdo->exec($sql);
            $this->put($pdo);

            return true;
        } catch (\PDOException $e) {
            $this->put(null);
            return $e->getMessage();
        }
    }
}